/**
 * @author 侯非
 * @date 2009年3月9日
 * @class DispatchUserInfoRole
 * @extends Ext.Panel
 * @description 用户权限分配
 */
DispatchUserInfoRole = Ext.extend(Ext.Panel, {
			myid : "myid",
			myGrid : null,
			myForm : null,
			// 构造方法(_config 构造参数)
			constructor : function(_config) {
				if (_config == null) {
					_config = {}
				}
				// 将构造参数附加给当前对象
				Ext.apply(this, _config);
				this.myGrid = new DispatchUserInfoRoleGrid();
				this.myForm = new DispatchUserInfoRoleForm();
				// 将父类的构造拷贝过来
				DispatchUserInfoRole.superclass.constructor.call(this, {
							id : this.myid,
							title : "用户角色分配",
							layout : "fit", // 填充布局
							bodyStyle : "backgroundColor:#DFE8F6;",
							border : false, // 不要边框
							iconCls : "houfei-treeNodeLeafIcon",
							items : [this.myGrid, this.myForm]
						});
				/**
				 * 监听myForm的自定义事件myDispatch
				 */
				this.myForm.on("myDispatch", function() {
							this.myDispatch();
						}, this);
				/**
				 * 监听myForm的自定义事件cancelMyDispatch
				 */
				this.myForm.on("cancelMyDispatch", function() {
							this.myForm.getForm().reset();
							this.myGrid.getStore().reload();
						}, this);

			},

			/**
			 * 将表格选择的值传递给表单
			 */
			selectRowSetForm : function() {
				var _myf = this.myForm;
				this.myGrid.on("gridRowSelect", function(_r) {
							_myf.getForm().loadRecord(_r);
						});
			},

			/**
			 * 分配角色事件
			 */
			myDispatch : function() {
				// 获取表格选择模板
				var _sm = this.myGrid.getSelectionModel();
				// 获取当前选定的记录的总行数
				var _count = _sm.getCount();
				// 表单
				var _mf = this.myForm;
				// 表格
				var _grid = this.myGrid;
				// 如果选择了一条记录
				if (_count > 0) {
					// 如果验证通过则提交表单
					if (_mf.getForm().isValid() == true) {
						// 提交表单
						_mf.mySubmit();
						_mf.on("myOnSuccess", function(_form, _action) {
									// 重新加载表格数据
									_grid.getStore().reload();
									// 重置表单
									_mf.getForm().reset();
								});
					} else {
						return;
					}
				} else {
					Ext.Msg.show({
								title : "系统提示",
								msg : "请您选择一个您要分配角色的人员信息!",
								buttons : Ext.Msg.OK,
								icon : Ext.Msg.INFO
							});
				}
			}
		});

/**
 * @author 侯非
 * @date 2009年3月9日
 * @class DispatchUserInfoRoleGrid
 * @extends Ext.grid.GridPanel
 * @description 用户权限分配表格
 */
DispatchUserInfoRoleGrid = Ext.extend(Ext.grid.GridPanel, {
	// 构造方法
	constructor : function() {
		// 数据存贮器
		this["store"] = new Ext.data.JsonStore({
					url : "userInfo.do?operator=showUserInfoByPage",
					totalProperty : "totalCount",
					root : "rows",
					fields : ["userId", "userTrueName", "userAccount",
							"userrole.urName", "userrole.urId"]
				});
		// 拷贝父类的构造方法
		DispatchUserInfoRoleGrid.superclass.constructor.call(this, {
			autoWidth : true,
			border : false, // 不显示边框
			autoHeight : true,
			viewConfig : {
				forceFit : true
			},
			// 填充加载时间
			loadMask : {
				Msg : "数据加载中,请稍候..."
			},
			// 行选择模式
			selModel : new Ext.grid.RowSelectionModel({
						// 单行选择
						singleSelect : true,
						// 事件监听
						listeners : {
							// 行选择事件
							"rowselect" : {
								// 事件(方法名)
								fn : this.onRowSelect,
								// 作用域
								scope : this
							}

						}
					}),
			// 列模板
			colModel : new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), {
						header : "编号",
						sortable: true,  //允许排序
						dataIndex : "userId"
					}, {
						header : "账号",
						sortable: true,  //允许排序
						dataIndex : "userAccount"
					}, {
						header : "真实姓名",
						sortable: true,  //允许排序
						dataIndex : "userTrueName"
					}, {
						header : "用户角色",
						sortable: true,  //允许排序
						dataIndex : "userrole.urName"
					}]),
			bbar : new Ext.PagingToolbar({
				store : this["store"], // 数据存储器
				pageSize : 10, // 页大小
				displayMsg : "共<font color=\"green\"> {2} </font>条记录,当前页记录索引<font color=\"green\"> {0} - {1}</font>&nbsp;&nbsp;&nbsp;",
				displayInfo : true
			})
		});

		this.getStore().load({
					params : {
						start : 0,
						limit : 10
					}
				});

		/**
		 * 为当前组件添加自定义事件
		 */
		this.addEvents("gridRowSelect");
	},

	/**
	 * 行选择事件
	 * 
	 * @param {}
	 *            _sm this
	 * @param {}
	 *            _index 当前行的索引
	 * @param {}
	 *            _r Record
	 */
	onRowSelect : function(_sm, _index, _r) {
		// 引发事件(将事件抛出,参数_r,会传递给自定义事件gridRowSelect)
		this.fireEvent("gridRowSelect", _r);
	}
});

/**
 * @author 侯非
 * @date 2009年3月9日
 * @class DispatchUserInfoRoleForm
 * @extends Ext.form.FormPanel
 * @description 用户权限分配表单
 */
DispatchUserInfoRoleForm = Ext.extend(Ext.form.FormPanel, {
			// 下拉列表数据存储器
			userRoleStore : null,
			// 构造方法
			constructor : function() {
				// 给下拉列表数据存储器赋值
				this.userRoleStore = new Ext.data.JsonStore({
							url : "userRole.do?operator=showAllUserRoles",
							fields : ["urId", "urName"]
						});
				// // 拷贝父类的构造方法
				DispatchUserInfoRoleForm.superclass.constructor.call(this, {
							layout : "form",
							labelWidth : 55,
							baseCls : "x-plain", // 强制背景色
							bodyStyle : "padding:10px;",
							width : "100%",
							autoHeight : true,
							defaults : {
								xtype : "textfield"
							},
							items : [{
										fieldLabel : "编号",
										width : "90%",
										readOnly : true,
										name : "userId"
									}, {
										fieldLabel : "账号",
										width : "90%",
										disabled : true,
										name : "userAccount"
									}, {
										fieldLabel : "真实姓名",
										width : "90%",
										disabled : true,
										name : "userTrueName"
									}, {
										fieldLabel : "用户角色",
										width : "90%",
										disabled : true,
										name : "userrole.urName"
									}, {
										fieldLabel : "分配角色",
										xtype : "combo", // 类型为下拉列表框
										store : this.userRoleStore, // 指定数据
										triggerAction : "all", // 显示所有数据
										readOnly : true, // 只读
										allowBlank : false, // 不允许为空
										emptyText : "请选择用户角色(权限)",
										hiddenName : "myUserRoleId", // 下拉列表框的name
										displayField : 'urName', // 要显示的值
										valueField : 'urId' // 要提交的值
									}],
							tbar : ["-", {
										text : "确定分配",
										iconCls : "houfei-editicon",
										tooltip : "为当前选择的用户分配角色",
										handler : this.onMyDispatch,
										scope : this
									}, "-", {
										text : "取消分配",
										iconCls : "houfei-tbarCancelIcon",
										tooltip : "取消当前分配角色操作",
										handler : this.onMyDispatch,
										scope : this
									}, "-"]
						});

				// 添加自定义事件(操作成功)
				this.addEvents("myOnSuccess");
				// 添加自定义事件(确定分配)
				this.addEvents("myDispatch");
				// 添加自定义事件(取消分配)
				this.addEvents("cancelMyDispatch");
			},
			/**
			 * 表单提交
			 */
			mySubmit : function() {
				this.getForm().submit({
							url : "userInfo.do?operator=editUserInfoRole",
							waitTitle : "数据传输",
							waitMsg : "数据传输中,请稍等...",
							// 成功回调方法
							success : this.onSuccess,
							// 失败回调方法
							failure : this.onFailure,
							// 作用域
							scope : this

						})
			},

			/**
			 * 分配
			 */
			onMyDispatch : function() {
				// 向外抛出事件
				this.fireEvent("cancelMyDispatch");
			},

			/**
			 * 取消分配事件
			 */
			onCancelMyDispatch : function() {
				// 向外抛出事件
				this.fireEvent("cancelMyDispatch");
			},

			/**
			 * 执行成功
			 * 
			 * @param {}
			 *            _form
			 * @param {}
			 *            _action 服务端返回的值
			 */
			onSuccess : function(_form, _action) {
				// 引发自定义事件(向外抛出事件,_form, _action将作为参数传递给自定义事件的方法)
				this.fireEvent("myOnSuccess", _form, _action);
			},

			/**
			 * 执行失败
			 * 
			 * @param {}
			 *            _form
			 * @param {}
			 *            _action 服务端返回的值
			 */
			onFailure : function(_form, _action) {
				Ext.Msg.alert("系统消息", _action.result["errorMsg"]);
			}

		});
